/*********************************************************************************
* Copyright (c) zhujinyang.
* All rights reserved.
*
* \file
*
* gpio driver
*
* 
*********************************************************************************/
#ifndef HAL_GPIO_DRV_H
#define HAL_GPIO_DRV_H


typedef enum {
    GPIO_DIR_OUT,
    GPIO_DIR_OUT_PULLUP,
    GPIO_DIR_OUT_PULLDN,
    GPIO_DIR_IN,
    GPIO_DIR_IN_PULLUP,
    GPIO_DIR_IN_PULLDN,
    GPIO_DIR_MAX
} GPIO_DIR_E;

/********************************************************************************
* module declare
********************************************************************************/
#ifdef GPIO_DEF
#undef GPIO_DEF
#endif

#define GPIO_DEF(IO_CH, GPIO_BASE, GPIO_PIN, IN_OUT, INIT_LEVEL)  \
        IO_CH,
                   


typedef enum {
    #include "hal_gpio_def.table"
    GPIO_IO_CH_MAX
} GPIO_CH_E;




/**********************************************************************************
* \brief:       Reset PIN Orientation Status
* \param[in]:   ch: see hal_gpio_def.table
* \return:      -1 : channel abnormal, 0: success
**********************************************************************************/
INT32S hal_gpio_reset(INT32U ch);


/**********************************************************************************
* \brief:       set gpio output level value
* \param[in]:   ch: see hal_gpio_def.table
* \return:      -1 : channel abnormal, 0: success
**********************************************************************************/
INT32S hal_gpio_output_high(INT32U ch);

/**********************************************************************************
* \brief:       reset gpio output level value
* \param[in]:   ch: see hal_gpio_def.table
* \return:      -1 : channel abnormal, 0: success
**********************************************************************************/
INT32S hal_gpio_output_low(INT32U ch);


/**********************************************************************************
* \brief:       toggle gpio output level value
* \param[in]:   ch: see hal_gpio_def.table
* \return:      -1 : channel abnormal, 0: success
**********************************************************************************/
INT32S hal_gpio_toggleoutput(INT32U ch);


/**********************************************************************************
* \brief:       read gpio input statue, high level or low level
* \param[in]:   ch: see hal_gpio_def.table
* \return:      -1 : channel abnormal, 0: low level, 1: high level
**********************************************************************************/
INT32S hal_gpio_readinput(INT32U ch);

/**********************************************************************************
* \brief:       gpio driver init
* \param[in]:   none
* \return:      none
**********************************************************************************/
void hal_gpio_initdrv(void);


#endif






